// ----------------------------------
// RSDK Project: Sonic 1/Sonic 2
// Script Description: Ball Hog Object
// Script Author: Christian Whitehead/Simon Thomley
// Unpacked by Rubberduckycooly's script unpacker
// ----------------------------------

//-------Aliases-------//
private alias 44 : TYPE_BALLHOG

// Function declarations
reserve function BallHog_DebugDraw
reserve function BallHog_DebugSpawn

// Static Values

// Tables
public table BallHog_table37
	0, 2, 3, 2, 0, 2, 3, 2, 0, 2, 3, 2, 0, 1, 0
end table

public table BallHog_table36
	20, 20, 10, 10, 20, 20, 10, 10, 20, 20, 10, 10, 20, 10
end table


function BallHog_DebugDraw
	DrawSpriteFX(0, FX_FLIP, object.xpos, object.ypos)
end function


function BallHog_DebugSpawn
	CreateTempObject(TypeName[Ball Hog], 0, object.xpos, object.ypos)
	object[tempObjectPos].direction = object.direction
	object[tempObjectPos].propertyValue = 1
end function


event ObjectMain
	CallFunction(PlayerObject_EnemyPop)
	foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
		BoxCollisionTest(C_TOUCH, object.entityPos, -12, -18, 12, 18, currentPlayer, object[currentPlayer].value40, object[currentPlayer].value38, object[currentPlayer].value41, object[currentPlayer].value39)
		if checkResult == 1
			CallFunction(PlayerObject_BadnikBreak)
		end if
	next

	foreach (TypeName[Bullet], arrayPos0, ACTIVE_ENTITIES)
		BoxCollisionTest(C_TOUCH, object.entityPos, -12, -18, 12, 18, arrayPos0, -6, -4, 6, 4)
		if checkResult == 1
			CallFunction(BulletKill)
		end if
	next	
	if object.frame == 3
		object.ypos += object.yvel
		object.yvel += 0x95C0
		ObjectTileCollision(CSIDE_FLOOR, 0, 20, 0)
		if checkResult == 0
			object.animationTimer = 2
		end if
	end if
	object.animationTimer--
	if object.animationTimer <= 0
		GetTableValue(object.animationTimer, object.value1, BallHog_table36)
		GetTableValue(object.frame, object.value1, BallHog_table37)
		object.value1++
		if object.value1 >= 14
			object.value1 = 0
		end if
		if object.frame == 3
			object.yvel = -0x29999
			object.ypos += object.yvel
			object.yvel += 0x95C0
		end if
		if object.frame == 1
			CreateTempObject(TypeName[Ball Hog Bomb], 0, object.xpos, object.ypos)
			if object.direction == FLIP_NONE
				object[tempObjectPos].xpos -= 0x40000
				object[tempObjectPos].xvel = -0x10000
			else
				object[tempObjectPos].xpos += 0x40000
				object[tempObjectPos].xvel = 0x10000
			end if
			object[tempObjectPos].ypos += 0xC0000
			object[tempObjectPos].value0 = object.propertyValue
			object[tempObjectPos].value0 *= 60
		end if
	end if
end event


event ObjectDraw
	DrawSpriteFX(object.frame, FX_FLIP, object.xpos, object.ypos)
end event


event ObjectStartup
	CheckCurrentStageFolder("Zone06")
	if checkResult == 1
		LoadSpriteSheet("SBZ/Objects.gif")
		SpriteFrame(-11, -17, 22, 37, 1, 170)
		SpriteFrame(-11, -17, 22, 37, 24, 170)
		SpriteFrame(-12, -12, 24, 32, 47, 175)
		SpriteFrame(-11, -20, 22, 40, 72, 167)
	end if
	CheckCurrentStageFolder("BossRush")
	if checkResult == 1
		LoadSpriteSheet("MBZ/Objects.gif")
		SpriteFrame(-11, -17, 22, 37, 76, 292)
		SpriteFrame(-11, -17, 22, 37, 99, 292)
		SpriteFrame(-12, -12, 24, 32, 122, 297)
		SpriteFrame(-11, -20, 22, 40, 147, 289)
	end if
	CheckCurrentStageFolder("Zone00")
	if checkResult == 1
		LoadSpriteSheet("GHZ/Objects3.gif")
		SpriteFrame(-11, -17, 22, 37, 76, 292)
		SpriteFrame(-11, -17, 22, 37, 99, 292)
		SpriteFrame(-12, -12, 24, 32, 122, 297)
		SpriteFrame(-11, -20, 22, 40, 147, 289)
	end if
	foreach (TypeName[Ball Hog], arrayPos0, ALL_ENTITIES)
		temp0 = object[arrayPos0].propertyValue
		temp0 &= 128
		if temp0 != 0
			object[arrayPos0].direction = FLIP_X
			object[arrayPos0].propertyValue &= 127
		end if
	next
	SetTableValue(TypeName[Ball Hog], DebugMode_ObjCount, DebugMode_TypesTable)
	SetTableValue(BallHog_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)
	SetTableValue(BallHog_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)
	DebugMode_ObjCount++
end event

event RSDKDraw
	DrawSprite(0)
end event

event RSDKLoad
	LoadSpriteSheet("Global/Display.gif")
	SpriteFrame(-16, -16, 32, 32, 1, 143)
end event
